package com.workants.eboleta.dao;


import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Vector;
import com.workants.eboleta.model.Solicitante;
import com.workants.eboleta.model.Titular;

public class DaoRegistro {

	
private static DaoRegistro instance;
	
	private DaoRegistro(){
		
	}	
	
	public static DaoRegistro getIntance(){
		
		if(instance == null){
			instance = new DaoRegistro();
		}
		return instance;
	}
	
	
	public int subscribir(Titular titular, Solicitante solicitante, String nombreDeImpuesto, String codigo){
		
		String consulta = "insert into (nombre, apellido, tipoDocumento, numeroDeDocumento, tipoTelefono, numeroTelefono, "
				+ "tipoTelefonoAlternativo,	numeroTelefonoAlternativo, correoElectronico, estado) values "
				+ "(?,?,?,?,?,?,?,?,?,?)";
		Vector<Object> datos = new Vector<Object>();
		datos.add(titular.getNombre());
		datos.add(titular.getApellido());
		datos.add(titular.getTipoDocumentoTitular());
		datos.add(titular.getNumeroDeDocumentoTitular());
		datos.add(titular.getTipoTelefonoTitular());
		datos.add(titular.getNumeroDeDocumentoTitular());
		datos.add(titular.getTipoTelefonoAlternativoTitular());
		datos.add(titular.getNumeroDeTelefonoAlternativoTitular());
		datos.add(titular.getCorreoElectronicoTitular());
		datos.add((titular.isEstadoPersona()) ? 1 : 0);
		int idTitular = 0;
		Conexion conexion = null;
		try {
			conexion = new Conexion();
			conexion.getConexion().setAutoCommit(false);
			idTitular = conexion.insert(consulta, datos);
			if(idTitular > 0){
				
				consulta = "insert into (idTitular, tipoImpuesto, "
						+ "fechaSubcripcion ,estadoSubscripcion, codigoPagoElectronico`) values (?,?,?,?,?)";
				boolean estadoSubscripcion = false;
				datos.clear();
				datos.add(idTitular);
				datos.add(nombreDeImpuesto);
				datos.add(new Timestamp(new Date().getTime()));
				datos.add(estadoSubscripcion ? 1:0);
				datos.add(codigo);
				int idSubscripcion = conexion.insert(consulta, datos);
				conexion.getConexion().commit();
				return idSubscripcion;
			}
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return 0;
	}
	
	public int subscribir(Titular titular, String nombreDeImpuesto, String codigo){
		
		String consulta = "insert into titular (nombre, apellido, tipoDocumento, numeroDeDocumento, tipoTelefono, numeroTelefono "
				+ ",tipoTelefonoAlternativo, numeroTelefonoAlternativo, correoElectronico, estado) values "
				+ "(?,?,?,?,?,?,?,?,?,?)";
		Vector<Object> datos = new Vector<Object>();
		datos.add(titular.getNombre());
		datos.add(titular.getApellido());
		datos.add(titular.getTipoDocumentoTitular());
		datos.add(titular.getNumeroDeDocumentoTitular());
		datos.add(titular.getTipoTelefonoTitular());
		datos.add(titular.getNumeroDeDocumentoTitular());
		datos.add(titular.getTipoTelefonoAlternativoTitular());
		datos.add(titular.getNumeroDeTelefonoAlternativoTitular());
		datos.add(titular.getCorreoElectronicoTitular());
		datos.add((titular.isEstadoPersona()) ? 1 : 0);
		int idTitular = 0;
		Conexion conexion = null;
		try {
			conexion = new Conexion();
			conexion.getConexion().setAutoCommit(false);
			idTitular = conexion.insert(consulta, datos);
			if(idTitular > 0){
								
				//inserto en subscripcion
				consulta = "insert into suscripciones (idTitular, tipoImpuesto, "
						+ "fechaSuscripcion, estadoSuscripcion, codigoPagoElectronico) values (?,?,?,?,?)";
				boolean estadoSubscripcion = false;
				datos.clear();
				datos.add(idTitular);
				datos.add(nombreDeImpuesto);
				datos.add(new Timestamp(new Date().getTime()));
				datos.add(estadoSubscripcion ? 1:0);
				datos.add(codigo);
				conexion.insert(consulta, datos);			
				
				//reset consulta,datos y luego insert en log
				datos.clear();
				consulta = "insert into log (fecha, servicio , metodo, tipo, idPersona) values (?,?,?,?,?)";
				datos.add(new Timestamp(new Date().getTime()));
				datos.add("servicioRegistrar");
				datos.add("suscribir(titular,nombreDeImpuesto,codigo)");
				datos.add("contribuyente");
				datos.add(idTitular);					
				int idLog = conexion.insert(consulta, datos);				
				conexion.getConexion().commit();
				return idLog;
			}else {
				conexion.getConexion().rollback(); 
				System.out.println("No se inserto titular, rollback");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return 0;
	}

	public int subscribirSolicitante(Titular titular, Solicitante solicitante,
			String nombreDeImpuesto, String codigo) {
		
		String consulta = "insert into solicitante (nombre, apellido, tipoDocumento, numeroDeDocumento, "
				+ "tipoTelefono, numeroTelefono, tipoTelefonoAlternativo, "
				+ "numeroTelefonoAlternativo, correoElectronico, estado) values (?,?,?,?,?,?,?,?,?,?)"; 
		Vector<Object>datos = new Vector<Object>();
		datos.add(solicitante.getNombre());
		datos.add(solicitante.getApellido());
		datos.add(solicitante.getTipoDocumentoTitular());
		datos.add(solicitante.getNumeroDeDocumentoSolicitante());
		datos.add(solicitante.getTipoTelefonoSolicitante());
		datos.add(solicitante.getNumeroDeTelefonoSolicitante());
		datos.add("no aplica");
		datos.add("no aplica");
		//datos.add(solicitante.getTipoTelefonoAlternativoSolicitante());
		//datos.add(solicitante.getNumeroDeTelefonoAlternativoSolicitante());
		datos.add(solicitante.getCorreoElectronicoSolicitante());
		datos.add((solicitante.isEstadoPersona()) ? 1 : 0);
		int idSolicitante = 0;
		Conexion conexion = null;
		try {
		conexion = new Conexion();
		conexion.getConexion().setAutoCommit(false);
		
		idSolicitante = conexion.insert(consulta, datos);
				if (idSolicitante > 0){
					consulta = "insert into titular (nombre, apellido, tipoDocumento, numeroDeDocumento, tipoTelefono, numeroTelefono "
							+ ",tipoTelefonoAlternativo, numeroTelefonoAlternativo, correoElectronico, estado, idSolicitante) values "
							+ "(?,?,?,?,?,?,?,?,?,?,?)";
					datos.clear();
					datos.add(titular.getNombre());
					datos.add(titular.getApellido());
					datos.add(titular.getTipoDocumentoTitular());
					datos.add(titular.getNumeroDeDocumentoTitular());
					datos.add(titular.getTipoTelefonoTitular());
					datos.add(titular.getNumeroDeDocumentoTitular());
					datos.add(titular.getTipoTelefonoAlternativoTitular());
					datos.add(titular.getNumeroDeTelefonoAlternativoTitular());
					datos.add("no aplica");
					datos.add((titular.isEstadoPersona()) ? 1 : 0);
					datos.add(idSolicitante);
					int idTitular = 0;
					idTitular = conexion.insert(consulta, datos);
						if(idTitular > 0){
						
							//inserto en subscripcion
							consulta = "insert into suscripciones (idTitular, tipoImpuesto, "
								+ "fechaSuscripcion, estadoSuscripcion, codigoPagoElectronico) values (?,?,?,?,?)";
							boolean estadoSubscripcion = false;
							datos.clear();
							datos.add(idTitular);
							datos.add(nombreDeImpuesto);
							datos.add(new Timestamp(new Date().getTime()));
							datos.add(estadoSubscripcion ? 1:0);
							datos.add(codigo);
							conexion.insert(consulta, datos);			
						
							//reset consulta,datos y luego insert en log
							datos.clear();
							consulta = "insert into log (fecha, servicio , metodo, tipo, idPersona) values (?,?,?,?,?)";
							datos.add(new Timestamp(new Date().getTime()));
							datos.add("servicioRegistrar");
							datos.add("subscribirSolicitante(titular:"+titular.getIdPersona()+", solicitante:"+solicitante.getIdPersona()+",nombreDeImpuesto, codigo)");
							datos.add("contribuyente");
							datos.add(idTitular);					
							int idLog = conexion.insert(consulta, datos);				
							conexion.getConexion().commit();
							return idLog;
						}else {
							conexion.getConexion().rollback(); 
							System.out.println("No se inserto titular, rollback");
						}
			
		}else {
			conexion.getConexion().rollback(); 
			System.out.println("No se inserto solicitante, rollback");
		}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		return 0;
	}
}
